home *** CD-ROM | disk | FTP | other *** search
- /*
- * Source machine generated by GadToolsBox V2.0b
- * which is (c) Copyright 1991-1993 Jaba Development
- *
- * GUI Designed by : -- Heinz Reinert --
- */
-
- #include <exec/types.h>
- #include <intuition/intuition.h>
- #include <intuition/classes.h>
- #include <intuition/classusr.h>
- #include <intuition/imageclass.h>
- #include <intuition/gadgetclass.h>
- #include <libraries/gadtools.h>
- #include <graphics/displayinfo.h>
- #include <graphics/gfxbase.h>
- #include <clib/exec_protos.h>
- #include <clib/intuition_protos.h>
- #include <clib/gadtools_protos.h>
- #include <clib/graphics_protos.h>
- #include <clib/utility_protos.h>
- #include <proto/intuition.h>
- #include <proto/graphics.h>
- #include <proto/exec.h>
- #include <proto/dos.h>
- #include <proto/gadtools.h>
- #include <exec/memory.h>
- #include <string.h>
-
-
-
- #define GetString( g ) ((( struct StringInfo * )g->SpecialInfo )->Buffer )
- #define GetNumber( g ) ((( struct StringInfo * )g->SpecialInfo )->LongInt )
-
- #define GD_list 0
- #define GD_new 1
- #define GD_del 2
- #define GD_descr 3
- #define GD_command1 4
- #define GD_command2 5
- #define GD_command3 6
- #define GD_save 7
- #define GD_runa 8
- #define GD_run3 9
- #define GD_run2 10
- #define GD_run1 11
-
- #define GDX_list 0
- #define GDX_new 1
- #define GDX_del 2
- #define GDX_descr 3
- #define GDX_command1 4
- #define GDX_command2 5
- #define GDX_command3 6
- #define GDX_save 7
- #define GDX_runa 8
- #define GDX_run3 9
- #define GDX_run2 10
- #define GDX_run1 11
-
- #define Project0_CNT 12
- UBYTE *vers = "\0$VER: RunList 3";
-
- extern struct IntuitionBase *IntuitionBase;
- extern struct Library *GadToolsBase;
-
- extern struct Screen *Scr;
- extern UBYTE *PubScreenName;
- extern APTR VisualInfo;
- extern struct Window *Project0Wnd;
- extern struct Gadget *Project0GList;
- extern struct Gadget *Project0Gadgets[12];
- extern UWORD Project0Left;
- extern UWORD Project0Top;
- extern UWORD Project0Width;
- extern UWORD Project0Height;
- extern UBYTE *Project0Wdt;
- extern struct TextAttr topaz8;
- extern UWORD Project0GTypes[];
- extern struct NewGadget Project0NGad[];
- extern ULONG Project0GTags[];
-
-
- extern int SetupScreen( void );
- extern void CloseDownScreen( void );
- extern int OpenProject0Window( void );
- extern void CloseProject0Window( void );
-
-
- struct Screen *Scr = NULL;
- UBYTE *PubScreenName = NULL;
- APTR VisualInfo = NULL;
- struct Window *Project0Wnd = NULL;
- struct Gadget *Project0GList = NULL;
- struct Gadget *Project0Gadgets[12];
- UWORD Project0Left = 323;
- UWORD Project0Top = 10;
- UWORD Project0Width = 324;
- UWORD Project0Height = 0;
- UBYTE *Project0Wdt = (UBYTE *)"RunList 3";
-
- struct TextAttr topaz8 = {
- ( STRPTR )"topaz.font", 8, 0x00, 0x01 };
-
- UWORD Project0GTypes[] = {
- LISTVIEW_KIND,
- BUTTON_KIND,
- BUTTON_KIND,
- STRING_KIND,
- STRING_KIND,
- STRING_KIND,
- STRING_KIND,
- BUTTON_KIND,
- BUTTON_KIND,
- BUTTON_KIND,
- BUTTON_KIND,
- BUTTON_KIND
- };
-
-
- struct NewGadget Project0NGad[] = {
- 9, 4, 208, 96, NULL, NULL, GD_list, 0, NULL, NULL,
- 223, 4, 72, 12, (UBYTE *)"NEW", NULL, GD_new, PLACETEXT_IN, NULL, NULL,
- 223, 16, 72, 12, (UBYTE *)"DELETE", NULL, GD_del, PLACETEXT_IN, NULL, NULL,
- 9, 96, 208, 12, NULL, NULL, GD_descr, 0, NULL, NULL,
- 9, 111, 287, 12, NULL, NULL, GD_command1, 0, NULL, NULL,
- 9, 123, 287, 12, NULL, NULL, GD_command2, 0, NULL, NULL,
- 9, 135, 287, 12, NULL, NULL, GD_command3, 0, NULL, NULL,
- 223, 28, 72, 12, (UBYTE *)"SAVE", NULL, GD_save, PLACETEXT_IN, NULL, NULL,
- 223, 40, 72, 32, (UBYTE *)"RUN ALL", NULL, GD_runa, PLACETEXT_IN, NULL, NULL,
- 223, 96, 72, 12, (UBYTE *)"RUN 3", NULL, GD_run3, PLACETEXT_IN, NULL, NULL,
- 223, 84, 72, 12, (UBYTE *)"RUN 2", NULL, GD_run2, PLACETEXT_IN, NULL, NULL,
- 223, 72, 72, 12, (UBYTE *)"RUN 1", NULL, GD_run1, PLACETEXT_IN, NULL, NULL
- };
-
-
- ULONG Project0GTags[] = {
- (TAG_DONE),
- (TAG_DONE),
- (TAG_DONE),
- (GTST_MaxChars), 256, (TAG_DONE),
- (GTST_MaxChars), 256, (TAG_DONE),
- (GTST_MaxChars), 256, (TAG_DONE),
- (GTST_MaxChars), 256, (TAG_DONE),
- (TAG_DONE),
- (TAG_DONE),
- (TAG_DONE),
- (TAG_DONE),
- (TAG_DONE)
- };
-
-
-
- int SetupScreen( void )
- {
- if ( ! ( Scr = LockPubScreen( PubScreenName )))
- return( 1L );
-
- if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
- return( 2L );
-
- return( 0L );
- }
-
- void CloseDownScreen( void )
- {
- if ( VisualInfo ) {
- FreeVisualInfo( VisualInfo );
- VisualInfo = NULL;
- }
-
- if ( Scr ) {
- UnlockPubScreen( NULL, Scr );
- Scr = NULL;
- }
- }
-
- int OpenProject0Window( void )
- {
- struct NewGadget ng;
- struct Gadget *g;
- UWORD lc, tc;
- UWORD offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
-
- if ( ! ( g = CreateContext( &Project0GList )))
- return( 1L );
-
- for( lc = 0, tc = 0; lc < Project0_CNT; lc++ ) {
-
- CopyMem((char * )&Project0NGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
-
- ng.ng_VisualInfo = VisualInfo;
- ng.ng_TextAttr = &topaz8;
- ng.ng_LeftEdge += offx;
- ng.ng_TopEdge += offy;
-
- Project0Gadgets[ lc ] = g = CreateGadgetA((ULONG)Project0GTypes[ lc ], g, &ng, ( struct TagItem * )&Project0GTags[ tc ] );
-
- while( Project0GTags[ tc ] ) tc += 2;
- tc++;
-
- if ( NOT g )
- return( 2L );
- }
-
- if ( ! ( Project0Wnd = OpenWindowTags( NULL,
- WA_Left, Project0Left,
- WA_Top, Project0Top,
- WA_Width, Project0Width,
- WA_Height, Project0Height + offy,
- WA_IDCMP, LISTVIEWIDCMP|
- BUTTONIDCMP|
- STRINGIDCMP|
- IDCMP_NEWSIZE|
- IDCMP_CLOSEWINDOW|
- IDCMP_CHANGEWINDOW|
- IDCMP_INTUITICKS |
- IDCMP_MOUSEBUTTONS|
- IDCMP_REFRESHWINDOW,
- WA_Flags, WFLG_SIZEGADGET|
- WFLG_DRAGBAR|
- WFLG_DEPTHGADGET|
- WFLG_CLOSEGADGET|
- WFLG_SMART_REFRESH,
- WA_Gadgets, Project0GList,
- WA_Title, Project0Wdt,
- WA_ScreenTitle, "RunList 3 © Heinz Reinert 1995",
- WA_PubScreen, Scr,
- WA_MinWidth, 324,
- WA_MinHeight, 164,
- WA_MaxWidth, 324,
- WA_MaxHeight, 164,
- TAG_DONE )))
- return( 4L );
-
- GT_RefreshWindow( Project0Wnd, NULL );
-
- return( 0L );
- }
-
- void CloseProject0Window( void )
- {
- if ( Project0Wnd ) {
- CloseWindow( Project0Wnd );
- Project0Wnd = NULL;
- }
-
- if ( Project0GList ) {
- FreeGadgets( Project0GList );
- Project0GList = NULL;
- }
- }
-
- /*
- * Struktur für einen Datenbankeintrag
- */
-
- struct VDB {
- char Name[30];
- char list[256];
- USHORT new;
- USHORT del;
- char command1[81], command2[81], command3[81];
- USHORT save;
- USHORT runa;
- USHORT run3;
- USHORT run2;
- USHORT run1;
-
- };
-
-
-
- struct VDBnode {
- struct Node n; /*** Für Liste ***/
- struct VDB d; /*** VDB-Struktur ***/
- };
-
- /*
- * Flags
- */
-
- #define VDBF_STEREO 1
-
- /*
- *
- * In dieser Liste befinden sich die VDB-Nodes
- *
- */
-
- struct List vdblist;
-
- /*
- * Der aktuelle Eintrag
- */
-
- struct VDBnode *currentprj;
-
- /*
- * Die von der Gadtoolsbox erzeugten Header
- */
-
-
- /*
- *
- * Die Hilfsroutinen
- *
- */
-
- /*
- * Allgemeine Gadgets
- */
-
- /*
- * Gadtools-Gadget einschalten
- */
- void gt_OnGadget( struct Gadget *gad,
- struct Window *w )
- {
- GT_SetGadgetAttrs( gad, w, NULL, GA_DISABLED, FALSE, TAG_DONE );
- }
- /*
- * ...und wieder aus...
- */
- void gt_OffGadget( struct Gadget *gad,
- struct Window *w )
- {
- GT_SetGadgetAttrs( gad, w, NULL, GA_DISABLED, TRUE, TAG_DONE );
- }
-
-
- /*
- * String-Gadgets
- */
- void gt_SetString( struct Gadget *gad,
- struct Window *w,
- char *string )
- {
- GT_SetGadgetAttrs( gad, w, NULL, GTST_String, string, TAG_DONE );
- }
-
- char * gt_GetString( struct Gadget *gad )
- {
- struct StringInfo *si = gad->SpecialInfo;
-
- if( si )
- return( ( char * ) si->Buffer );
- else
- return( NULL );
- }
-
- /*
- * Listenverwaltung für Listview-Gadgets
- */
-
- /*
- * Liste anhängen
- * "list" kann ~0 (-1) sein, dann ist kein Listenzugriff möglich
- */
-
- void gt_AttachList( struct Gadget *lv,
- struct Window *w,
- struct List *list )
- {
- GT_SetGadgetAttrs( lv, w, NULL, GTLV_Labels, list, TAG_DONE );
- }
-
- /*
- * Aktuellen Eintrag setzen
- */
- void gt_SetLV( struct Gadget *gad,
- struct Window *w,
- ULONG value)
- {
- GT_SetGadgetAttrs( gad, w, NULL, GTLV_Selected, value, TAG_DONE );
- }
-
- /*
- * x-ten Eintrag aus einer Exec-Liste holen
- */
- struct Node * gt_GetListEntry( struct List *l,
- int num )
- {
- int count = 0;
- struct Node *n = l->lh_Head;
-
- while( n->ln_Succ )
- {
- if( num==count ) return( n );
- n = n->ln_Succ;
- count++;
- }
- return( NULL );
- }
- /*
- * Nummer einer Node aus einer Liste feststellen
- * -1 falls nicht in Liste
- */
- int gt_GetListEntryNum( struct List *l,
- struct Node *n )
- {
- int count = 0;
- struct Node *r = l->lh_Head;
-
- while( r->ln_Succ )
- {
- if( r==n ) return( count );
- r = r->ln_Succ;
- count++;
- }
- return( -1 );
- }
- /*
- * Anzahl Einträge einer Liste zählen
- */
- int gt_GetListNumEntries( struct List *l )
- {
- int count = 0;
- struct Node *n = l->lh_Head;
-
- while( n->ln_Succ )
- {
- n = n->ln_Succ;
- count++;
- }
-
- return( count );
- }
-
- /************************************************************************/
-
- /*
- *
- * Liste laden
- *
- */
-
- void loadprjlist( void )
- {
- struct VDB new;
- struct VDBnode *n;
- BPTR f;
-
- /*** Liste initialisieren ***/
- NewList( &vdblist );
- currentprj = NULL;
-
- /*** Datei öffnen ***/
- f = Open( "S:List.DAT", MODE_OLDFILE );
- if( !f )
- return;
-
- /*** Einträge einlesen */
- while( Read( f, &new, sizeof( new ) ) == sizeof( new ) )
- {
- /*** newe Node ***/
- n = AllocVec( sizeof( *n ), 0 );
- if( !n )
- break;
-
- /*** Struktur kopieren und an Liste anhängen ***/
- n->d = new;
- n->n.ln_Name = n->d.Name;
- n->n.ln_Pri = - n->d.Name[0];
- Enqueue( &vdblist, (struct Node *) n );
- }
-
- Close( f );
- }
-
- /*
- * Liste speichern und freigeben
- */
-
- void save_and_freeprjlist(void )
- {
- struct VDBnode *n;
- BPTR f;
-
- f = Open( "S:List.DAT", MODE_NEWFILE );
-
- while( ( n = (struct VDBnode * ) RemHead( &vdblist ) ) )
- {
- /*** Node speichern... ***/
- if( f )
- Write( f, &n->d, sizeof( struct VDB ) );
-
- /*** ...und freigeben ***/
- FreeVec( n );
- }
-
- if( f )
- Close( f );
- }
-
-
- /************************************************************************/
-
- /*
- * Schaltet die Gadgets mit Ausnahme der Liste ein oder aus
- * abhängig davon, ob gerade ein Listeneintrag aktiviert ist
- * oder nicht
- *
- */
-
- void checkonoff( void )
- {
- int c;
-
- if( currentprj )
- {
- for( c = GD_del; c < Project0_CNT; c++ )
- gt_OnGadget( Project0Gadgets[c], Project0Wnd );
- }
- else
- {
- for( c = GD_del; c < Project0_CNT; c++ )
- gt_OffGadget( Project0Gadgets[c], Project0Wnd );
- }
-
- }
-
- /*
- *
- * Trägt die Werte aus der aktuellen Struktur in die
- * Gadgets ein
- *
- */
-
- void setgadvals( void )
- {
-
- if( !currentprj )
- return;
-
- gt_SetString( Project0Gadgets[ GD_descr ], Project0Wnd,
- currentprj->d.Name );
- gt_SetString( Project0Gadgets[ GD_command1 ], Project0Wnd,
- currentprj->d.command1 );
- gt_SetString( Project0Gadgets[ GD_command2 ], Project0Wnd,
- currentprj->d.command2 );
- gt_SetString( Project0Gadgets[ GD_command3 ], Project0Wnd,
- currentprj->d.command3 );
-
-
- }
-
-
- /*
- *
- * Erzeugt einen neuen, leeren Eintrag
- *
- */
-
- void newvdb( void )
- {
- struct VDBnode *new;
-
- new = AllocVec( sizeof( *new ), MEMF_CLEAR );
-
- if( !new )
- return;
-
- currentprj = new;
-
- new->n.ln_Name = new->d.Name;
-
- strcpy( new->d.Name, "new" );
-
- gt_AttachList( Project0Gadgets[GD_list], Project0Wnd, (struct List *) ~0 );
-
- new->n.ln_Pri = - new->d.Name[0];
- Enqueue( &vdblist, (struct Node *) new );
-
- gt_AttachList( Project0Gadgets[GD_list], Project0Wnd, &vdblist );
-
- gt_SetLV( Project0Gadgets[GD_list], Project0Wnd, gt_GetListEntryNum( &vdblist, new ) );
- checkonoff();
- setgadvals();
- }
-
-
-
- /*
- * Gadget-Event bearbeiten
- */
-
- void dogadup( struct IntuiMessage *im )
- {
- struct Gadget *g = im->IAddress;
-
- switch( g->GadgetID )
- {
-
- /*** Ein Listeneintrag ***/
- case GD_list:
- currentprj = (struct VDBnode *) gt_GetListEntry( &vdblist, im->Code );
- checkonoff();
- setgadvals();
- break;
-
- /*** new ***/
- case GD_new:
- newvdb();
- break;
-
- /*** Löschen ***/
- case GD_del:
- if( currentprj )
- {
- gt_AttachList( Project0Gadgets[ GD_list ], Project0Wnd, (struct List *) ~0 );
- Remove( currentprj );
- FreeVec( currentprj );
- currentprj = FALSE;
- checkonoff();
- gt_AttachList( Project0Gadgets[ GD_list ], Project0Wnd, &vdblist );
- gt_SetLV( Project0Gadgets[ GD_list ], Project0Wnd, ~0 );
- }
- break;
-
- /*** KassettenName ***/
- case GD_descr:
- if( currentprj )
- {
- gt_AttachList( Project0Gadgets[ GD_list ], Project0Wnd, (struct List *) ~0 );
- strcpy( currentprj->d.Name, gt_GetString( Project0Gadgets[ GD_descr ] ) );
- gt_AttachList( Project0Gadgets[ GD_list ], Project0Wnd, &vdblist );
- }
- checkonoff();
- break;
-
-
- case GD_command1:
- if( currentprj )
- {
- strcpy( currentprj->d.command1, gt_GetString( Project0Gadgets[ GD_command1 ] ) );
- }
- checkonoff();
- break;
-
- case GD_command2:
- if( currentprj )
- {
- strcpy( currentprj->d.command2, gt_GetString( Project0Gadgets[ GD_command2 ] ) );
- }
- checkonoff();
- break;
-
- case GD_command3:
- if( currentprj )
- {
- strcpy( currentprj->d.command3, gt_GetString( Project0Gadgets[ GD_command3 ] ) );
- }
- checkonoff();
- break;
-
- case GD_runa:
- {
- Execute(currentprj->d.command1, NULL, Output());
- Execute(currentprj->d.command2, NULL, Output());
- Execute(currentprj->d.command3, NULL, Output());
- }
- checkonoff();
- break;
-
- case GD_run1:
- {
- Execute(currentprj->d.command1, NULL, Output());
- }
- checkonoff();
- break;
-
- case GD_run2:
- {
- Execute(currentprj->d.command2, NULL, Output());
- }
- checkonoff();
- break;
-
- case GD_run3:
- {
- Execute(currentprj->d.command3, NULL, Output());
- }
- checkonoff();
- break;
-
- case GD_save:
- {
- save_and_freeprjlist();
- loadprjlist();
- }
- checkonoff();
- break;
- }
- }
-
-
- /*
- * Programmstart
- */
-
- int main( void )
- {
- struct IntuiMessage *im,imsg;
- BOOL Done = FALSE;
-
- USHORT code; /* Code. */
- ULONG seconds, micros; /* Time. */
-
- /* Declare and initialize the time stamps: */
- ULONG sec1 = 0;
- ULONG mic1 = 0;
- ULONG sec2 = 0;
- ULONG mic2 = 0;
-
- /*** Bildschirm und Fenster öffnen ***/
- SetupScreen();
- OpenProject0Window();
-
- /*** Liste laden ***/
- loadprjlist();
-
- /*** Liste anzeigen ***/
- gt_AttachList( Project0Gadgets[GD_list], Project0Wnd, &vdblist );
-
- /*** Gadgets setzen ***/
- checkonoff();
-
- /*** Hauptschleife ***/
- while( !Done )
- {
-
- /*** Auf IntuiMessage warten ***/
- while( !( im=GT_GetIMsg( Project0Wnd->UserPort ) ) )
- WaitPort( Project0Wnd->UserPort );
-
- code = im->Code;
- seconds = im->Seconds;
- micros = im->Micros;
-
- /*** Kopieren ***/
- imsg = *im;
- GT_ReplyIMsg( im );
-
- switch( imsg.Class )
- {
-
- /*** CLOSEWINDOW: Fenster schließen? ***/
- case IDCMP_CLOSEWINDOW:
- Done = TRUE;
- break;
-
- /*** Gadgetup; ein Gadget wurde ausgewählt ***/
- /*** Wir bearbeiten Gadget-Events in einer ***/
- /*** eigenen Routine ***/
- case GADGETUP:
- dogadup( &imsg );
- break;
-
-
- case IDCMP_MOUSEBUTTONS: /* The user pressed/released a mouse button. */
- if( code == SELECTDOWN )
- {
- /* Left button pressed. */
-
- /* Save the old time: */
- sec2 = sec1;
- mic2 = mic1;
-
- /* Get the new time: */
- sec1 = seconds;
- mic1 = micros;
-
- /* Check if it was a double-click or not: */
- if( DoubleClick( sec2, mic2, sec1, mic1 ) )
- {
- Execute("RUN >NIL: Shellwin ", NULL, Output());
- /* Reset the values: */
- sec1 = 0;
- mic1 = 0;
- }
- }
- break;
-
-
-
- /*** REFRESH: Grafikobjekte (Boxen) neu zeichnen ***/
- case IDCMP_REFRESHWINDOW:
- GT_BeginRefresh( Project0Wnd );
- GT_EndRefresh( Project0Wnd, TRUE );
- break;
-
-
- }
-
- }
-
- /*** Fenster und Bildschirm wieder schließen ***/
- CloseProject0Window();
- CloseDownScreen();
-
-
- return(0);
- }
-
-
-
-
-
-